module clock (
	input wire clk,
	input wire button1,
	input wire button2,
	input wire button3,
	input wire button4

	//数码管的选择信号
	output wire sel,
	//数码管的段选信号
	output wire [0:7] segments_selected;

	//蜂鸣器
	output wire buzzer
);

/*********************************
* 驱动部分
**********************************/

//数码管显示驱动
nixie_tube u_nixie_tube(
	//输入信号
	.clk(clk),
	//六个数码管分别显示的内容
	.nixie_tube_1(nixie_tube_1),
	.nixie_tube_2(nixie_tube_2),
	.nixie_tube_3(nixie_tube_3),
	.nixie_tube_4(nixie_tube_4),
	.nixie_tube_5(nixie_tube_5),
	.nixie_tube_6(nixie_tube_6),

	//输出信号
	.sel(sel),
	.segments_selected(segments_selected)
);

//蜂鸣器驱动
buzzer u_buzzer(
	//输入信号
	.clk(clk)
	.note(note),

	//输出信号
	.buzzer_out(buzzer)
);

/*********************************
 *控制数码管的显示内容的部分
 *********************************/

//该模块可以获取各个功能模块的输出,并最终决定输出哪一个
overall_display u_overall_display(
	//输入信号
	.clk(clk),
	.module_sel(module_sel),//模块选择信号

	//时间显示模块的输入
	.time_nixie_output1(time_nixie_output1),
	.time_nixie_output2(time_nixie_output2),
	.time_nixie_output3(time_nixie_output3),
	.time_nixie_output4(time_nixie_output4),
	.time_nixie_output5(time_nixie_output5),
	.time_nixie_output6(time_nixie_output6),

	//日期显示模块的输入
	.date_nixie_output1(date_nixie_output1),
	.date_nixie_output2(date_nixie_output2),
	.date_nixie_output3(date_nixie_output3),
	.date_nixie_output4(date_nixie_output4),
	.date_nixie_output5(date_nixie_output5),
	.date_nixie_output6(date_nixie_output6),

	//调整 模块的输入
	.modify_nixie_output1(modify_nixie_output1),
	.modify_nixie_output2(modify_nixie_output2),
	.modify_nixie_output3(modify_nixie_output3),
	.modify_nixie_output4(modify_nixie_output4),
	.modify_nixie_output5(modify_nixie_output5),
	.modify_nixie_output6(modify_nixie_output6),

	//总输出
	.nixie_tube_1(nixie_tube_1),
	.nixie_tube_2(nixie_tube_2),
	.nixie_tube_3(nixie_tube_3),
	.nixie_tube_4(nixie_tube_4),
	.nixie_tube_5(nixie_tube_5),
	.nixie_tube_6(nixie_tube_6)
);

//时间显示模块
time_display u_time_display(
	.clk(clk),
	.time_nixie_output1(time_nixie_output1),
	.time_nixie_output2(time_nixie_output2),
	.time_nixie_output3(time_nixie_output3),
	.time_nixie_output4(time_nixie_output4),
	.time_nixie_output5(time_nixie_output5),
	.time_nixie_output6(time_nixie_output6),

	//由时间处理模块传入时间
	.time_nixie_input1(time_nixie_input1),
	.time_nixie_input2(time_nixie_input2),
	.time_nixie_input3(time_nixie_input3),
	.time_nixie_input4(time_nixie_input4),
	.time_nixie_input5(time_nixie_input5),
	.time_nixie_input6(time_nixie_input6)
);

//日期显示模块
date_display u_date_diaplay(
	.clk(clk),
	.date_nixie_output1(date_nixie_output1),
	.date_nixie_output2(date_nixie_output2),
	.date_nixie_output3(date_nixie_output3),
	.date_nixie_output4(date_nixie_output4),
	.date_nixie_output5(date_nixie_output5),
	.date_nixie_output6(date_nixie_output6)
);

//调整输出模块
modify_display u_modify_display(
	.clk(clk),
	.modify_nixie_output1(modify_nixie_output1),
	.modify_nixie_output2(modify_nixie_output2),
	.modify_nixie_output3(modify_nixie_output3),
	.modify_nixie_output4(modify_nixie_output4),
	.modify_nixie_output5(modify_nixie_output5),
	.modify_nixie_output6(modify_nixie_output6)
);

/**********************************
*处理时间的部分
***********************************/
//同时获取“正常流逝的时间”和“调整后的时间”的输入并综合一个输出
overall_time u_overall_time(
	.ordinary_time(ordinary_time),
	.modified_time(modified_time),

	//将时间传给时间显示模块
	.time_nixie_input1(time_nixie_input1),
	.time_nixie_input2(time_nixie_input2),
	.time_nixie_input3(time_nixie_input3),
	.time_nixie_input4(time_nixie_input4),
	.time_nixie_input5(time_nixie_input5),
	.time_nixie_input6(time_nixie_input6),

	//将总时间传给闹钟模块
	.overall_time(overall_time)
);

//“正常流逝的时间”
ordinary_time u_ordinary_time(
	.clk(clk),
	.ordinary_time(ordinary_time)
);

//“调整后的时间”
modified_time u_modified_time(
	.clk(clk),
	.modified_time(modified_time),
	.button_add(button3),
	.button_minus(button4),
	.button_switch(button1),
	.button_modifiy(button2)
);

/*******************************
*日期显示
********************************/
//与时间显示类似,略


/*******************************
*闹钟部分
********************************/
//闹钟
alarm u_alarm(
	overall_time(overall_time),
	alarm_on(music_on),
	music_reset(music_reset)
);

//乐谱,持续输入激活信号可以输出乐谱
music_sheet u_music_sheet(
	//输入
	.clk(clk),
	.music_on(music_on),
	.resetn(music_reset),//重置音乐播放进度

	//输出
	.note(note)
);

endmodule